home *** CD-ROM | disk | FTP | other *** search
- ;ドライブ・チェック・プログラム 「CHKDRIVE.COM」 ver. 1.02
- ; produced by AAM.
- ; how to use.
- ; chkdrive [ドライブ名]
- ; リターンコードに指定ドライブの状態が返ります。
- ; tab = 8
-
- LF equ 0ah
- CR equ 0dh
- EOM equ '$'
- CAP equ 11011111b
-
- code segment
- assume cs:code,ds:code,ss:code
-
- org 80h
- C_LINE db 128 dup(?) ;引数の取得
-
- START:
- cmp C_LINE[4],CR ;入力が二文字でない
- jnz short L_ERR
- cmp C_LINE[3],':' ;入力がドライブ名でない
- jnz short L_ERR
-
- and C_LINE[2],CAP ;一文字目がアルファベット(大文字変換)
- cmp C_LINE[2],'A' ;'A'より小さい
- jb short L_ERR
- cmp C_LINE[2],'Z' ;'Z'より大きい
- ja short L_ERR
-
- mov al,C_LINE[2] ;ドライブ名をコマンドラインから入力
- mov DNAME[0],al
-
- mov dx,offset C_ERR ;致命的エラーの中断アドレスの変更
- mov ax,2524h ;割り込みベクタのセット
- int 21h
-
- mov dx,offset DNAME ;ファイルの新規作成(既存チェックあり)
- mov cx,00h ;ファイル属性(R/W 通常ファイル)
- mov ah,5bh
- int 21h
-
- jnc short F1 ;ファンクションエラーなし
- cmp RETCODE,0 ;今までにエラーがない
- jnz short F2
- mov RETCODE,2 ;「存在しないユニット」を返す
-
- F2:
- cmp ax,50h ;ファイル作成の失敗(ファイルが既に存在する)
- jnz short F1
- mov RETCODE,14 ;「ファイルの存在」エラーコードは14
- mov ah,9 ;「ファイルが既に存在する」エラーの表示
- mov dx,offset DNAME
- int 21h
- jmp short EXIT
-
- F1:
- mov dx,offset DNAME ;ファイルの削除
- mov ah,41h
- int 21h
-
- EXIT:
- mov al,RETCODE ;引数をRETCODEにしてプログラムの終了
- mov ah,4ch
- int 21h
-
- L_ERR: ;コマンドラインエラー
- mov ah,9
- mov dx,offset USAGE ;使用説明
- int 21h
- mov RETCODE,255
- jmp short EXIT
-
- C_ERR: ;致命的エラー発生
- push cs ;セグメント・レジスタの変更
- pop ds
- mov bx,di ;エラーコード(上位ビットは不定)
- inc bx ;エラーコードを1以上にする
- mov RETCODE,bl ;エラーコードをRETCODEに保存
- mov al,0 ;エラー対処コード(エラーを無視)
- iret
-
- RETCODE db ? ;エラーリターン用バッファ
- DNAME db 'A:' ;チェックするドライブ名
- FNAME db '\CHKDRIVE.TMP',0 ;オープンするファイル名
- db 'が既に存在します。',CR,LF,EOM ;ファイルのエラー
- USAGE db '/* CHKDRIVE.COM Ver. 1.02' ;使用説明
- db ' By AAM. */',CR,LF
- db 'CHKDRIVE [ドライブ名]',CR,LF
- db 'リターンコードに指定ドライブの'
- db '状態が返ります。',CR,LF,EOM
-
- code ends
- end START